<?php
declare (strict_types=1);

namespace middleware;

use app\admin\service\base\JwtService;
use auth\Auth;

/**
 * 需要的登录
 */
class AuthMiddleware
{
    public function handle($request, \Closure $next, string $name = '')
    {
        //header头信息获取登录access_token
        $access_token = $request->header('Authorization') ?: $request->header('access_token') ?: $request->param('Authorization');
        //是否存在access_token
        if (!$access_token) {
            return jsonReturn(-1, [], '请求签名缺失,请重新登录!');
        }
        //解析access_token数据信息
        $vfRes = JwtService::vfAccessToken($access_token);
        if (!$vfRes['bool']) {
            return jsonReturn(-1, [], $vfRes['data']);
        }
        //判断来源平台
        switch (true) {
            case ($name === 'admin' and $vfRes['platform'] === 'admin')://总后台管理
                //定义管理员id常量
                define('WS_ADMIN_ID', $vfRes['data']);
                //验证接口权限
                $route = request()->baseUrl();
                //验证接口权限
                $Auth = new Auth();
                $res = $Auth->check($route);
//                if (!$res) {
//                    return jsonReturn(0, [], '抱歉,您没有权限执行当前操作,请联系管理员或上级主管!');
//                }
                break;
            case ($name === 'pc')://pc端
                //定义管理员id常量
                define('PC_USER_ID', $vfRes['data']);
                break;
            case ($name === 'mobile' and $vfRes['platform'] === 'mobile')://用户扫码取袋
                //定义用户id常量
                define('MOBILE_USER_ID', $vfRes['data']);
                break;
            case ($name === 'advertiser' and $vfRes['platform'] === 'advertiser')://广告主
                //定义广告主id常量
                define('WS_AD_USER_ID', $vfRes['data']);
                break;
            default:
                return jsonReturn(-1, [], '端口权限错误,请重新登录!');
                break;
        }
        //返回
        return $next($request);
    }


}